package com.sdry.basic.mapper;

import com.sdry.basic.entity.AttendanceRecord;
import com.sdry.basic.entity.AttendanceTeam;
import com.sdry.basic.entity.AttendanceTeamType;
import com.sdry.basic.entity.AttendanceTeamUser;
import com.sdry.system.entity.SysUser;

import java.util.List;

/**
 * @author lian
 * @date 2020/04/13
 */
public interface AttendanceMapper {

    /**
     * 分页查询班组类型
     * @param  att 参数类型：班组类型实体 AttendanceTeamType
     * @return
     *  返回 null 表示没有找到
     */
    List<AttendanceTeamType> queryAttendanceType(AttendanceTeamType att);

    /**
     * 条件查询班组类型的数据有几条
     * @param  att 参数类型：班组类型实体 AttendanceTeamType
     * @return
     *  返回 null 表示没有找到
     */
    Long countAttendanceType(AttendanceTeamType att);

    /**
     * 给班组类型表插入数据
     * @param  att 参数类型：班组类型实体 AttendanceTeamType
     * @return
     *  返回 正数 表示插入成功
     */
    Long insertAttendanceType(AttendanceTeamType att);

    /**
     * 修改班组类型表数据
     * @param  att 参数类型：班组类型实体 AttendanceTeamType
     * @return
     *  返回 正数 表示修改成功
     */
    Long updateAttendanceType(AttendanceTeamType att);

    /**
     * 删除班组类型表数据
     * @param  ids 主键ID用逗号（，）拼接的字符串
     * @return
     *  返回 正数 表示删除成功
     */
    Long deleteAttendanceType(String ids);

    /**
     * 查询所有班组
     * @return 返回 null 表示没有找到
     */
    List<AttendanceTeam> getTeamList();

    /**
     * 查查询未绑定班组的用户
     * @param  user 用户类型实体：SysUser
     * @return 返回 null 表示没有找到
     */
    List<SysUser> queryUsersAreNotOnTheTeam(SysUser user);

    /**
     * 给班组用户表插入数据，返回ID
     * @param param 实体类
     * @return  返回正数，插入成功
     */
    Long insertAttendanceUser(AttendanceTeamUser param);

    /**
     * 根据班组ID查询班组的成员
     * @return 返回null.没查到数据
     */
    List<SysUser> queryTeamMembers(Long teamId);

    /**
     * 根据主键拼接的字符串删除班组中的用户
     * @param ids 用户主键拼接的字符串
     * @return 返回正数，删除成功
     */
    Long deleteAttendanceTeamUser(String ids);

    /**
     * 根据打卡人的ID查询班组规则
     * @param userId 用户主键ID
     * @return 如果返回null，这个用户不在考勤组内
     */
    List<AttendanceTeamType> getAttendanceTypeByUserId(String userId);

    /**
     * 给考勤记录表插入数据
     * @param  ar 参数类型：考勤记录实体 AttendanceRecord
     * @return 返回 正数 表示插入成功
     */
    Long insertAttendanceRecord(AttendanceRecord ar);

    /**
     * 查询是否有打卡记录
     * @param ar 参数实体 AttendanceRecord
     * @return
     */
    Long queryLogByParam(AttendanceRecord ar);
}
